gsk: Add GskRenderNodeType
authorBenjamin Otte <otte@redhat.com>
Sat, 10 Dec 2016 20:42:01 +0000 (21:42 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 20 Dec 2016 17:01:09 +0000 (18:01 +0100)
For now, this is unused.

docs/reference/gsk/gsk4-sections.txt
gsk/gskenums.h
gsk/gskrenderer.c
gsk/gskrendernode.c
gsk/gskrendernode.h
gsk/gskrendernodeprivate.h

index 0282fd2087911d7635fb285f8106310dae401674..6518d1f5790863962cc9acff5c5f91fc7ca6eaf9 100644 (file)
@@ -27,6 +27,8 @@ GSK_TYPE_SCALING_FILTER
 <FILE>GskRenderNode</FILE>
 gsk_render_node_ref
 gsk_render_node_unref
+GskRenderNodeType
+gsk_render_node_get_node_type
 gsk_render_node_get_parent
 gsk_render_node_get_first_child
 gsk_render_node_get_last_child
index 28d4dcafe72117043f24cb6f183dc3886c47fdb0..9040c69cbff28f874819905fc3d9213e0eb20a31 100644 (file)
 #error "Only <gsk/gsk.h> can be included directly."
 #endif
 
+/**
+ * GskRenderNodeType:
+ * @GSK_NOT_A_RENDER_NODE: Error type. No node will ever have this type.
+ * @GSK_CONTAINER_NODE: A node containing a stack of children
+ * @GSK_CAIRO_NODE: A node drawing a #cairo_surface_t
+ * @GSK_TEXTURE_NODE: A node drawing a #GskTexture
+ *
+ * The type of a node determines what the node is rendering.
+ *
+ * Since: 3.90
+ **/
+typedef enum {
+  GSK_NOT_A_RENDER_NODE = 0,
+  GSK_CONTAINER_NODE,
+  GSK_CAIRO_NODE,
+  GSK_TEXTURE_NODE
+} GskRenderNodeType;
+
 /**
  * GskScalingFilter:
  * @GSK_SCALING_FILTER_LINEAR: linear interpolation filter
index 7682e9ffa3c560d5d7bd1868831a5fe8cb194114..873806762804fddf427a372771195cb3b13b8ba6 100644 (file)
@@ -691,7 +691,7 @@ gsk_renderer_create_render_node (GskRenderer *renderer)
 {
   g_return_val_if_fail (GSK_IS_RENDERER (renderer), NULL);
 
-  return gsk_render_node_new ();
+  return gsk_render_node_new (GSK_CONTAINER_NODE);
 }
 
 /*< private >
index 13869e13821b2a0765d39680573a3446f52ed269..aced1e42ea551688bf5ed72fa67509d2ce1ed8e3 100644 (file)
@@ -82,14 +82,20 @@ gsk_render_node_finalize (GskRenderNode *self)
 
 /*< private >
  * gsk_render_node_new:
- * @renderer: a #GskRenderer
+ * @type: type of the new node
  *
  * Returns: (transfer full): the newly created #GskRenderNode
  */
 GskRenderNode *
-gsk_render_node_new (void)
+gsk_render_node_new (GskRenderNodeType type)
 {
-  GskRenderNode *self = g_slice_new0 (GskRenderNode);
+  GskRenderNode *self;
+  
+  g_return_val_if_fail (type != GSK_NOT_A_RENDER_NODE, NULL);
+
+  self = g_slice_new0 (GskRenderNode);
+
+  self->type = type;
 
   self->ref_count = 1;
 
@@ -148,6 +154,24 @@ gsk_render_node_unref (GskRenderNode *node)
     gsk_render_node_finalize (node);
 }
 
+/**
+ * gsk_render_node_get_node_type:
+ * @node: a #GskRenderNode
+ *
+ * Returns the type of the @node.
+ *
+ * Returns: the type of the #GskRenderNode
+ *
+ * Since: 3.90
+ */
+GskRenderNodeType
+gsk_render_node_get_node_type (GskRenderNode *node)
+{
+  g_return_val_if_fail (GSK_IS_RENDER_NODE (node), GSK_NOT_A_RENDER_NODE);
+
+  return node->type;
+}
+
 /**
  * gsk_render_node_get_parent:
  * @node: a #GskRenderNode
index 74fdf0d7bde4a31f56981ca4338f0558f2f03b38..5af118bedc8f0f0b7a4c62f6e04eadc079f383d7 100644 (file)
@@ -41,6 +41,9 @@ GskRenderNode *         gsk_render_node_ref                     (GskRenderNode *
 GDK_AVAILABLE_IN_3_90
 void                    gsk_render_node_unref                   (GskRenderNode *node);
 
+GDK_AVAILABLE_IN_3_90
+GskRenderNodeType       gsk_render_node_get_node_type           (GskRenderNode *node);
+
 GDK_AVAILABLE_IN_3_90
 GskRenderNode *         gsk_render_node_get_parent              (GskRenderNode *node);
 GDK_AVAILABLE_IN_3_90
index 43b2970ee44cbe472ddc24f13b7c445a1df12190..6307989329ecdf6a86884bf9f87a6bf7964afba1 100644 (file)
@@ -8,6 +8,8 @@ G_BEGIN_DECLS
 
 struct _GskRenderNode
 {
+  GskRenderNodeType type;
+
   volatile int ref_count;
 
   /* The graph */
@@ -57,7 +59,7 @@ struct _GskRenderNode
   gboolean needs_world_matrix_update : 1;
 };
 
-GskRenderNode *gsk_render_node_new (void);
+GskRenderNode *gsk_render_node_new (GskRenderNodeType type);
 
 void gsk_render_node_make_immutable (GskRenderNode *node);